/*
 *  Copyright (C) 2010 Glauco
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.balisunrise.common;

/**
 * @author Glauco
 * @version 1.0
 */
public interface Messenger<V> extends VisualEntity<V> {

    /**
     * Level da Mensagem
     */
    public static final int CONFIRMATION = 0;

    /**
     * Level da Mensagem
     */
    public static final int INFORMATION = 1;

    /**
     * Level da Mensagem
     */
    public static final int WARNING = 2;

    /**
     * Level da Mensagem
     */
    public static final int ERROR = 3;

    /**
     * Adiciona uma mensagem com o icone para mensagem baseado no level.
     *
     * @param id Identificação da mensagem.
     * @param message Mensagem que irá ser mostrada.
     * @param level level da mensagem, pode ser um dos valores definidos nesta
     * interface: CONFIRMATION, INFORMATION, WARNING, ERROR
     * 
     * @see #CONFIRMATION
     * @see #INFORMATION
     * @see #WARNING
     * @see #ERROR
     */
    public void addMessage(String id, String message, int level);

    /**
     * Adiciona uma mensagem.
     *
     * @param message Mensagem a ser adicionada.
     */
    public void addMessage(Message message);

    /**
     * Mostra uma mensagem de notificação para o usuário.
     *
     * @param message Mensagem que irá ser mostrada.
     * @param level level da mensagem, pode ser um dos valores definidos nesta
     * interface: CONFIRMATION, INFORMATION, WARNING, ERROR
     *
     * @see #CONFIRMATION
     * @see #INFORMATION
     * @see #WARNING
     * @see #ERROR
     */
    public void notify(String message, int level);

    /**
     * Mostra uma mensagem de notificação para o usuário.
     *
     * @param message Mensagem a ser notificada.
     */
    public void notify(Message message);

    /**
     * Remove uma mensagem.
     * 
     * @param id
     */
    public void removeMessage(String id);

    /**
     * Remove todas Mensagens.
     */
    public void removeAllMessages();

    /**
     * Verifica e retorna se exite alguma mensagem de erro logada.
     * @return
     */
    public boolean hasError();

    /**
     * Atribui a representação visual pai desta.
     *
     * @param parent
     */
    public void setOwner(VisualEntity owner);
}